<?php

class Catalogue_TestController extends Zend_Controller_Action {

    function init() {
		parent::init();

        //загружаем модуль каталог
        Workset_Module::loadModule('catalogue');
	}

	function objectAction() {
        $this->_helper->viewRenderer->setNoRender(true);
		try {

            $data = array(
                'title' => 'object text 1',
                'preview_text' => "preview",
                'text' => "detail",
                'created' => time()
            );

            $object = Catalogue_Model_Object::create($data);

            exprTest($object instanceof Catalogue_Model_Object, null, 'Объект Catalogue_Model_Object');
            exprTest(array_intersect_key($object->toArray(), $data) == $data, null, 'Поля созданного объекта');

            exprTest(!$object->isModified(), null, 'Сырой объект, готовый к записи в базу');

            $id = $object->save();
            exprTest($id > 0, null, 'Сохранение объекта');

            exprTest($object->getId() == $id, null, 'ID сохраненного объекта');

            $object->setData(array(
                'title' => 'new title'
            ));

            exprTest(array_intersect_key($object->toArray(), $data) != $data, null, 'Изменение полей объекта');

            exprTest($object->isModified(), null, 'Объект изменил состояние');

            exprTest($object->updateData() === $id, null, 'Обновление объекта в базе');

            exprTest(!$object->isModified(), null, 'Объект не изменил состояние после сохранения');

            $data = array_intersect_key($object->toArray(), $data);
            $object['title'] = 'new title 2';

            exprTest(array_intersect_key($object->toArray(), $data) != $data, null, 'Изменение полей объекта');

            exprTest($object->isModified(), null, 'Объект изменил состояние');

            exprTest($object->updateData() === $id, null, 'Обновление объекта в базе');

            exprTest(!$object->isModified(), null, 'Объект не изменил состояние после сохранения');

            exprTest($object->delete() === $id, null, 'Удаление объекта в базе');

            try {
                $object = Catalogue_Model_Object::getInstance($id);
            } catch (Workset_Model_Exception $e) {
                exprTest(true, null, 'Подтверждение удаления объекта');
            }


		} catch (Zend_Exception $e) {
			echo $e->getMessage();
		}
    }

    function categoryAction() {
        $this->_helper->viewRenderer->setNoRender(true);
		try {

			//создание новой категории
			$category = Catalogue_Model_Category::create(array(
				'name' => 'My category',
				'code' => 'my_category',
				'type' => 'my_type',	
				'description' => 'My description',
			));

			exprTest($category instanceof Catalogue_Model_Category, null, 'объект Catalogue_Model_Category');

			exprTest(!$category->isModified(), null, 'Объект не менял состояние');

			$category['description'] = 'new description';

			exprTest(!$category->isModified(), null, 'Объект не менял состояние');

			$id = $category->save();

			exprTest($id > 0, null, 'Получен ID сохраненной категории');

			$category['description'] = 'new description';

			exprTest($category->isModified(), null, 'Объект изменил состояние');

			$id = $category->save();

			exprTest(!$category->isModified(), null, 'Объект не менял состояние после сохранения');

			//добавление подкатегории
			$subcategory = Catalogue_Model_Category::create(array(
				'name' => 'Subcategory',
				'code' => 'subcategory',
				'parent_id' => $id
			));

			exprTest($subcategory->hasParent(), null, 'Родительская категория');

			$subId = $subcategory->save();

			exprTest($subcategory->hasParent(), null, 'Родительская категория');

			exprTest($subId > 0, null, 'Получен ID сохраненной подкатегории');

			exprTest($subcategory->getParentId() == $id, null, 'ID родительской категории');

			$category = Catalogue_Model_Category::getInstance($id);

			exprTest(!$category->isEmpty(), null, 'Родительская категория не пустая');

			$subId = $subcategory->delete();

			exprTest($subId > 0, null, 'ID удаленной подкатегории');

			$category = Catalogue_Model_Category::getInstance($id);

			exprTest($category->isEmpty(), null, 'Родительская категория пустая');

			$id = $category->delete();

			exprTest($id > 0, null, 'ID удаленной категории');

			try {
                Catalogue_Model_Category::getInstance($id);
            } catch (Workset_Model_Exception $e) {
                exprTest(true, null, 'Подтверждение удаления категории');
            }

		} catch (Zend_Exception $e) {
			echo $e->getMessage();
		}

	}

}

